package com.wn.budget.controller;

import com.wn.budget.model.Template;
import com.wn.budget.model.TemplateMaterial;
import com.wn.budget.model.TemplateSpace;
import com.wn.budget.repository.TemplateMaterialRepository;
import com.wn.budget.repository.TemplateRepository;
import com.wn.budget.repository.TemplateSpaceRepository;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * 模板管理
 *
 * @author : linyuebin
 * @date : 2019/11/7
 */
@RestController
@RequestMapping(value = "template")
public class TemplateController {
    @Autowired
    private TemplateRepository templateRepository;

    @Autowired
    private TemplateSpaceRepository templateSpaceRepository;

    @Autowired
    private TemplateMaterialRepository templateMaterialRepository;

    @ApiOperation("获取所有的模板")
    @GetMapping("findTemplates")
    public List<Template> findTemplates() {
        return templateRepository.findAll();
    }

    @ApiOperation("根据模板id获取所有模板空间")
    @GetMapping("findTemplateSpaces")
    public List<TemplateSpace> findTemplateSpaces(@RequestParam("templateId") String templateId) {
        return templateSpaceRepository.findByTemplateId(templateId);
    }

    @ApiOperation(value = "模板添加空间")
    @PostMapping("insertTemplateSpace")
    public boolean insertTemplateSpace(TemplateSpace templateSpace) {
        templateSpace.setId(UUID.randomUUID().toString());
        templateSpace.setCreateDate(new Date());
        templateSpaceRepository.save(templateSpace);
        return true;
    }

    @ApiOperation("删除模板空间")
    @GetMapping("deleteTemplateSpace")
    public boolean deleteTemplateSpace(@RequestParam("id") String id) {
        templateSpaceRepository.deleteById(id);
        return true;
    }

    @ApiOperation("修改模板空间")
    @PostMapping("updateTemplateSpace")
    public boolean updateTemplateSpace(TemplateSpace templateSpace) {
        TemplateSpace space = templateSpaceRepository.getOne(templateSpace.getId());
        space.setSpaceName(templateSpace.getSpaceName());
        templateSpaceRepository.saveAndFlush(space);
        return true;
    }

    @ApiOperation("获取模板材料列表")
    @GetMapping("findTemplateMaterial")
    public Page<TemplateMaterial> findTemplateMaterial(@RequestParam("templateSpaceId") String templateSpaceId,
                                                       @RequestParam("pageIndex") int pageIndex,
                                                       @RequestParam("pageSize") int pageSize) {
        return templateMaterialRepository.findByTemplateSpaceId(templateSpaceId, PageRequest.of(pageIndex, pageSize));
    }

    @ApiOperation("删除模板材料")
    @GetMapping("deleteTemplateMaterial")
    public boolean deleteTemplateMaterial(@RequestParam("id") String id) {
        templateMaterialRepository.deleteById(id);
        return true;
    }

    @ApiOperation(value = "模板添加材料")
    @PostMapping("insertTemplateMaterial")
    public boolean insertTemplateMaterial(TemplateMaterial templateMaterial) {
        templateMaterial.setId(UUID.randomUUID().toString());
        templateMaterial.setCreateDate(new Date());
        templateMaterialRepository.save(templateMaterial);
        return true;
    }


}
